AI 엔지니어링 — EP0 선수지식 (v1)
대상: 고등학생·학부 1년차 (AI 입문자). AI 엔지니어링 EP1~7(LLM·Transformer·RoPE·YaRN·SFT·RLHF) 학습 진입 전 알아야 할 7가지 기초를 비유와 코드로 정리합니다.
검증일 2026-05-20 · Tavily+Brave+SearXNG N=3 · Tier 1 ≥10 (Stanford CS229·CS224N·MIT 6.S191·DeepLearning.AI·Hugging Face·fast.ai)
0. 들어가며
AI 엔지니어링 EP1~7 을 이해하려면 먼저 알아야 할 7가지 수학·CS 기초를 비유와 코드로 정리합니다.
AI 엔지니어링 강의에는 "벡터", "그래디언트", "softmax", "어텐션" 같은 용어가 자주 나옵니다. 이 용어들은 수학·신경망 기초 위에 쌓인 개념이라, 기초 없이 보면 이해하기 어렵습니다.
이 자료는 그 기초를 7개 영역(선형대수·미적분·확률통계·Python·신경망·자료구조·자연언어)으로 나눠 다룹니다. 한 번 훑은 뒤 본 강의로 가면 각 용어가 어디에 속하는지 지도가 그려집니다.
참고 — 외울 필요는 없습니다. "그런 게 있구나" 정도로 통과시키고, 막히면 참고 링크로 돌아오세요.
각 개념은 정의 → 비유 → 직접 해보기 → 코드 → 그림 → 실무 → 참고 → LLM 연결 순서로 설명합니다.
1. 선형대수
LLM 의 모든 입출력은 숫자 묶음(벡터)과 숫자 표(행렬)입니다. "강아지" 라는 단어를 컴퓨터가 이해하려면 수백 개의 숫자 묶음으로 바꿔야 하는데, 그 변환·연산·비교가 모두 선형대수입니다.
1.1 벡터 (Vector)
여러 숫자를 순서대로 묶은 묶음입니다. 화살표로도, 숫자 리스트로도 표현할 수 있습니다.
비유 1 — 화살표. "북동쪽으로 5km" 라는 말에는 방향(북동)과 크기(5km)가 함께 담겨 있습니다. 벡터가 정확히 이렇습니다. [3, 4] 는 x로 3, y로 4 간 화살표(길이 5)입니다.
비유 2 — 친구 정보 카드. [키 172, 몸무게 65, 시력 1.2] 는 한 친구를 나타내는 3차원 벡터입니다. 우리는 3차원까지만 그릴 수 있지만, 컴퓨터는 수천 차원도 똑같이 다룹니다.
실생활 예 — 영화 추천. 넷플릭스는 사용자를 [액션 80, 로맨스 30, 코미디 50], 영화를 [액션 90, 로맨스 5, 코미디 20] 으로 저장합니다. 두 벡터의 방향이 비슷하면 추천이 됩니다.
직접 해보기 — 벡터
[3, 4]의 길이는 각 숫자를 제곱해 더한 뒤(3²+4²=25) 루트를 씌워 √25 = 5 입니다(피타고라스 정리).[6, 8]은 √100 = 10 으로, 방향은 같고 길이만 2배입니다.
import numpy as np
v = np.array([3, 4])
print(np.linalg.norm(v)) # 5.0 (길이)
print(v / np.linalg.norm(v)) # [0.6 0.8] (단위벡터)
y
4 | ● (3,4)
3 | /:
| / : ← 길이 = √(3²+4²) = 5
0 +----+---+--- x
0 3
실무. 추천 시스템은 사용자와 상품을 모두 벡터로 저장합니다. 쿠팡·유튜브·스포티파이의 "추천" 이 곧 벡터 거리 계산입니다.
LLM 연결. 거대 언어모델은 "강아지" 를 768~4096 차원 벡터(임베딩)로 바꿉니다. 비슷한 뜻의 단어는 비슷한 방향을 가지며, EP2(임베딩)·EP4(어텐션)로 발전합니다.
더 깊이 — 3Blue1Brown 벡터편 · Khan Academy
1.2 행렬 (Matrix)
벡터를 여러 줄 쌓은 숫자 표(행 × 열 격자)입니다. 즉 행렬은 벡터의 묶음입니다.
비유 1 — 엑셀 시트. 학생 30명의 [국어, 영어, 수학] 점수는 30행 × 3열 표가 됩니다. 한 행이 한 학생의 점수 벡터죠.
비유 2 — 흑백 사진. 1920×1080 사진은 1080행 × 1920열 행렬(각 칸은 0~255 밝기)입니다. 컴퓨터에게 사진은 곧 행렬입니다.
실생활 예 — 영화관 좌석표. 행(A~J) × 열(1~20) 격자에 예매=1·빈자리=0 을 채우면, "몇 자리 남았나" 는 0 의 개수가 됩니다.
직접 해보기 —
[[90, 85, 100], [70, 95, 80]]은 행 2개·열 3개라서 shape = (2, 3), "2명 × 3과목" 입니다. 행렬 모양 읽기는 코딩에서 가장 자주 하는 일입니다.
M = np.array([[90, 85, 100], [70, 95, 80]])
print(M.shape) # (2, 3)
print(M[:, 2]) # [100 80] (수학 점수 열)
실무. 이미지(픽셀 행렬)·표 데이터·문장(단어 벡터 쌓기)이 전부 행렬입니다. 데이터 분석의 기본 단위죠.
LLM 연결. 문장 "나는 학교에 간다" 는 단어 4개 × 768 차원 = 4×768 행렬이 됩니다. 모델 가중치도 전부 거대 행렬입니다.
더 깊이 — Khan Academy: Matrices
1.3 내적 (Dot Product)
두 벡터를 같은 자리끼리 곱해 모두 더한 하나의 숫자입니다. "두 벡터가 얼마나 같은 방향인가" 를 나타내는 점수죠.
비유 1 — 취향 궁합. 나 [액션5, 로맨스1, 코미디4] 와 친구 [액션4, 로맨스2, 코미디5] 는 둘 다 액션·코미디가 높아 내적 값이 큽니다 = 궁합이 좋다는 뜻입니다.
비유 2 — 손전등과 벽. 정면으로 비추면 밝고(내적 큼), 비스듬하면 어둡고(작음), 90도 옆이면 안 닿습니다(내적 0 = 직각).
직접 해보기 —
[5, 1, 4] · [4, 2, 5]= (5×4)+(1×2)+(4×5) = 20+2+20 = 42. 연습으로[2, 3] · [4, 1]= 2×4 + 3×1 = 11.
a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(np.dot(a, b)) # 42
print(a @ b) # 42 (@ 도 내적)
실무. 검색 엔진은 "검색어 벡터 · 문서 벡터" 의 내적으로 관련도 점수를 매겨 랭킹합니다. 값이 클수록 위에 노출되죠.
LLM 연결. 어텐션의 핵심이 내적입니다. "이 단어가 저 단어에 얼마나 주목하나" 를 두 단어 벡터의 내적으로 계산합니다(EP4·EP5). 내적을 알면 어텐션은 그냥 곱하고 더하기입니다.
더 깊이 — 3Blue1Brown 내적편
1.4 코사인 유사도 (Cosine Similarity)
두 벡터의 각도만으로 비슷함을 재는 값(-1~1)입니다. 크기는 무시하고 방향만 봅니다.
비유 — 같은 곳 보기. 두 사람이 같은 방향(0도)이면 1, 직각(90도)이면 0, 정반대(180도)면 -1입니다.
왜 내적 대신 쓰나. 내적은 크기에 휘둘립니다(긴 문서일수록 무조건 큼). 코사인은 길이를 1로 맞춰 순수 방향만 비교하므로, 길이가 다른 문서끼리도 공정하게 비교할 수 있습니다.
직접 해보기 —
[1, 0]과[2, 0]은 둘 다 오른쪽을 향하니(각도 0) 코사인 = 1.[1, 0]과[0, 1]은 직각(90도)이라 0 입니다.
from numpy.linalg import norm
a = np.array([5, 1, 4]); b = np.array([4, 2, 5])
print(round(a @ b / (norm(a) * norm(b)), 3)) # 0.949
실무. 스포티파이 "비슷한 곡", 벡터DB(Pinecone·Chroma)의 "유사 문서 검색" 이 전부 코사인 유사도입니다. 인기곡이든 신곡이든 분위기 방향이 같으면 추천되죠.
LLM 연결. RAG(검색증강생성, EP2)에서 "내 질문과 가장 비슷한 문서 찾기" 가 코사인 유사도입니다. 수백만 문서 중 방향이 가장 가까운 것을 즉시 검색합니다.
더 깊이 — Khan Academy
1.5 행렬 곱 (Matrix Multiplication)
행렬끼리 곱해 새로운 표로 변환하는 연산입니다. 내적을 여러 번 한꺼번에 하는 것이죠.
비유 — 변환 기계. 행렬 곱은 입력을 넣으면 모양이 바뀌어 나오는 기계입니다. "한국어 벡터 → 영어 의미 벡터" 변환기 자체가 행렬이고, 적용이 행렬 곱입니다.
직접 해보기 — 결과의 한 칸만 보면,
[[1,2],[3,4]] × [[5,6],[7,8]]의 [0,0] 칸은 1행[1,2]과 1열[5,7]의 내적 = (1×5)+(2×7) = 19 입니다. 즉 행렬 곱은 행과 열의 내적을 칸마다 반복하는 것입니다.
A = np.array([[1, 2], [3, 4]]); B = np.array([[5, 6], [7, 8]])
print(A @ B) # [[19 22] [43 50]]
실무. 신경망의 모든 층이 "입력 × 가중치 행렬" 입니다. 답변 1개에 수천 번의 행렬 곱이 일어나며, GPU 가 AI 에 필수인 이유가 바로 행렬 곱을 초고속 병렬로 하기 때문입니다(EP1 인프라).
LLM 연결. Transformer 한 층은 여러 행렬 곱입니다. 대형 모델이 "수천억 개 파라미터" 라는 말은 행렬 칸이 수천억 개라는 뜻입니다.
더 깊이 — 3Blue1Brown 행렬 곱편
1.6 고유값·고유벡터 (Eigenvalue·Eigenvector)
어떤 변환(행렬)을 적용해도 방향이 바뀌지 않는 특별한 화살표가 고유벡터, 그 늘어난 배율이 고유값입니다.
비유 — 도는 지구본의 축. 빙글 도는 지구본에서 남극–북극 축만 자리를 바꾸지 않습니다(다른 점은 모두 돕니다). 그 축이 고유벡터로, 변환의 본질적 방향을 알려줍니다.
직접 해보기 —
[[2,0],[0,3]]를[1,0]에 곱하면[2,0]이 됩니다. 방향은 그대로고 길이만 2배죠. 따라서[1,0]은 고유벡터, 2 는 고유값입니다.
A = np.array([[2, 0], [0, 3]])
vals, _ = np.linalg.eig(A)
print(vals) # [2. 3.] (고유값)
실무. 초창기 구글 페이지랭크가 거대 링크 행렬의 고유벡터 계산이었습니다. 데이터의 핵심 축을 뽑는 도구(PCA 차원축소)입니다.
LLM 연결. 차원 축소(PCA)·임베딩 분석에 쓰입니다. EP5 의 위치임베딩(RoPE)도 회전 행렬 개념과 닿아 있어, 고유값·회전 직관이 있으면 훨씬 수월합니다.
더 깊이 — 3Blue1Brown 고유값편
1.7 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| 벡터 | 단어·문장의 의미 표현 (임베딩) |
| 행렬 | 문장 전체·모델 가중치 |
| 내적 | 어텐션 점수 (단어 간 주목도) |
| 코사인 유사도 | RAG 문서 검색·벡터DB |
| 행렬 곱 | 신경망 모든 층 (GPU 가속 대상) |
| 고유값 | 차원 축소·회전(RoPE 직관) |
한 문장으로, LLM 은 글자를 벡터로 바꾸고(임베딩) 행렬 곱으로 섞고 내적으로 서로 주목하게(어텐션) 만드는 거대한 선형대수 계산기입니다.
참고 자료 — 3Blue1Brown Essence of Linear Algebra (한국어 자막, 강력 추천) · Khan Academy Linear Algebra
2. 미적분
AI 가 학습한다는 건 "지금 틀린 답을 조금씩 고쳐 정답에 가까워지기" 입니다. 그 "조금씩 어느 방향으로" 를 알려주는 것이 미분이며, 신경망 학습의 심장입니다.
2.1 미분 (Derivative)
어떤 값이 순간적으로 얼마나 빨리 변하는가, 즉 기울기입니다.
비유 1 — 자동차 속도계. 1시간에 60km 가면 평균 속도는 60이지만, 지금 이 순간 속도계 바늘이 가리키는 값이 미분입니다.
비유 2 — 언덕 경사. 등산로의 지금 발 밑 경사가 미분입니다. 가파르면 미분이 크고, 평평하면 0입니다.
직접 해보기 —
y = x²의 미분은 2x 입니다(지수를 앞으로, 지수는 -1). x=3 이면 2×3 = 6, 즉 "x=3 근처에서 x가 1 늘면 y는 약 6 늘어난다" 는 뜻입니다.
def f(x): return x**2
x, h = 3.0, 1e-5
print(round((f(x+h) - f(x)) / h, 2)) # 6.0
실무. 모든 딥러닝 프레임워크가 미분을 자동 계산(autograd)해 "어느 방향으로 고쳐야 덜 틀리나" 를 찾습니다.
LLM 연결. 학습은 틀린 정도(loss)를 미분해 덜 틀리는 방향으로 가중치를 수정하는 일입니다. 미분 없이는 학습이 불가능합니다.
더 깊이 — 3Blue1Brown 미분편
2.2 편미분·그래디언트 (Gradient)
변수가 여러 개일 때 하나씩 따로 미분한 것이 편미분, 그걸 다 모은 화살표가 그래디언트입니다.
비유 — 등산 지도의 화살표. 산에서 가장 가파른 오르막 방향을 가리키는 화살표가 그래디언트입니다. 반대로 가면 가장 빨리 골짜기(정답)에 도착하죠.
직접 해보기 —
z = x² + y²의 그래디언트는[2x, 2y]입니다. (x=1, y=2)면[2, 4]죠.
import torch
x = torch.tensor(1.0, requires_grad=True)
y = torch.tensor(2.0, requires_grad=True)
(x**2 + y**2).backward()
print(x.grad, y.grad) # tensor(2.) tensor(4.)
실무. "그래디언트가 폭발/소실된다" 는 딥러닝 디버깅 단골 용어로, 학습이 안 될 때 가장 먼저 의심하는 부분입니다.
LLM 연결. 수십억 개 가중치 각각의 그래디언트를 구해 전부 동시에 조금씩 수정하는 것이 "학습 1 step" 입니다.
더 깊이 — Khan Academy: Gradient
2.3 체인룰 (Chain Rule)
함수 안에 함수가 있을 때(합성함수) 미분을 사슬처럼 곱해서 구하는 법입니다.
비유 — 도미노. A가 B를 밀고 B가 C를 밀면, "A가 C에 주는 영향" 은 (A→B 영향) × (B→C 영향)입니다. 미분도 똑같이 곱해서 거슬러 올라갑니다.
직접 해보기 —
y = (3x+1)²의 미분은 바깥(제곱) 미분 2(3x+1) 과 안쪽(3x+1) 미분 3 을 곱한 6(3x+1) 입니다.
x = torch.tensor(2.0, requires_grad=True)
y = (3*x + 1)**2
y.backward()
print(x.grad) # tensor(42.) = 6×(3×2+1)
실무. 역전파(Backpropagation)가 곧 체인룰입니다. 깊은 신경망의 마지막 층 오차를 첫 층까지 거슬러 전달하는 것이 전부 체인룰 곱셈입니다.
LLM 연결. Transformer 가 수십 층 깊어도 학습되는 이유는 체인룰로 오차를 끝까지 전달하기 때문입니다(EP4·EP7).
더 깊이 — 3Blue1Brown 체인룰편
2.4 경사하강법 (Gradient Descent)
그래디언트 반대 방향으로 조금씩 내려가 가장 낮은 골짜기(최소 오차)를 찾는 방법입니다.
비유 — 안개 속 하산. 짙은 안개로 앞이 안 보일 때, 발 밑 경사만 느끼며 가장 가파른 내리막으로 한 걸음씩 내려가면 결국 골짜기에 도착합니다.
직접 해보기 —
f(x)=x², x=3, 학습률 0.1 이면, 기울기 2×3=6 이므로 새 x = 3 − 0.1×6 = 2.4. 이를 반복하면 x 는 0(최소점)으로 수렴합니다.
x, lr = 3.0, 0.1
for _ in range(20):
x = x - lr * (2*x)
print(round(x, 3)) # 0.026 (거의 0)
실무. SGD, Adam 등 옵티마이저가 전부 경사하강 변형이며, "학습률 튜닝" 이 AI 엔지니어의 일상입니다.
LLM 연결. 모델 학습은 loss 골짜기를 경사하강으로 내려가는 일입니다. 학습률이 너무 크면 골짜기를 건너뛰고, 너무 작으면 영원히 도착하지 못합니다.
더 깊이 — 3Blue1Brown 신경망 학습편
2.5 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| 미분 | 가중치를 어느 방향 수정할지 |
| 그래디언트 | 모든 가중치의 수정 방향 묶음 |
| 체인룰 | 역전파 (깊은 층까지 오차 전달) |
| 경사하강 | 실제 학습 알고리즘 (Adam 등) |
한 문장으로, AI 학습은 틀린 정도를 미분(그래디언트)해서 체인룰로 끝까지 전달하고 경사하강으로 조금씩 고치는 반복입니다.
참고 자료 — 3Blue1Brown Essence of Calculus · Khan Academy Calculus
3. 확률·통계
LLM 은 다음 단어를 확률로 찍는 기계입니다. "나는 학교에 ___" 다음에 "간다"(80%)·"갔다"(15%)·"피자"(0.01%) 처럼 확률 분포를 내놓고 하나를 고릅니다. 그래서 확률은 LLM 의 모국어입니다.
3.1 확률분포
어떤 일이 각각 얼마나 자주 일어나는가의 지도이며, 모든 확률의 합은 1입니다.
비유 — 주사위·일기예보. 주사위는 1~6 이 각 1/6(균등 분포)이고, 일기예보 "비 70%, 맑음 30%" 도 분포입니다.
직접 해보기 — 동전 2번 던질 때 앞면 수는 앞0:1/4, 앞1:2/4, 앞2:1/4 이고, 합은 4/4 = 1 입니다(분포는 항상 합이 1).
probs = np.array([0.25, 0.5, 0.25])
print(probs.sum()) # 1.0
실무. LLM 의 출력은 전체 어휘(수만 단어)에 대한 확률분포입니다. "temperature" 설정이 이 분포를 뾰족(확실)하게 또는 완만(다양)하게 조절합니다.
LLM 연결. 모든 토큰 생성이 확률분포에서 뽑기이며, EP2 의 "temperature·top-p" 가 이 분포를 조작합니다.
더 깊이 — Khan Academy: Probability
3.2 조건부확률·베이즈
"B가 일어났다는 걸 알 때 A의 확률" 이 조건부확률이고, 새 증거로 믿음을 업데이트하는 법이 베이즈입니다.
비유 — 의사의 진단. 기침(증거)을 보고 감기 확률을 올려 잡는 것이며, 새 증상이 나오면 또 업데이트합니다.
직접 해보기 — 스팸 필터는 "무료" 라는 단어가 있으면 스팸 확률을 올립니다. 즉 P(스팸 | "무료") > P(스팸) 이고, 단어가 쌓일수록 확률이 갱신됩니다.
# P(스팸|단어) = P(단어|스팸)*P(스팸) / P(단어)
print(round(0.8 * 0.4 / 0.5, 3)) # 0.64
실무. 스팸 필터·의료 진단·A/B 테스트가 전부 베이즈로, "사전 믿음 → 데이터 → 사후 믿음" 사이클입니다.
LLM 연결. 언어모델은 "앞 단어들이 주어졌을 때 다음 단어 확률", 즉 조건부확률 P(다음 | 이전들)을 학습한 것입니다. 이것이 GPT 의 정의 그 자체입니다.
3.3 기댓값·분산
평균적으로 기대되는 값이 기댓값, 값들이 얼마나 흩어졌는가가 분산입니다.
비유 — 시험 점수. 반 평균 70점이 기댓값입니다. 다들 70 근처면 분산이 작고, 0~100 으로 널뛰면 분산이 큽니다.
직접 해보기 — 주사위 기댓값은 (1+2+3+4+5+6)/6 = 21/6 = 3.5 입니다.
vals = np.array([1,2,3,4,5,6])
print(vals.mean(), round(vals.var(), 2)) # 3.5 2.92
실무. 모델 성능 평가, 학습 안정성(분산 큰 그래디언트 = 불안정) 진단에 쓰입니다.
LLM 연결. 배치 학습과 정규화(LayerNorm)가 평균·분산을 다룹니다(섹션 5).
더 깊이 — Khan Academy: Statistics
3.4 최대우도추정·엔트로피·Cross-Entropy
데이터를 가장 그럴듯하게 설명하는 값 찾기가 MLE, 불확실성의 크기가 엔트로피, 예측과 정답의 차이 벌점이 cross-entropy 입니다.
비유 — 엔트로피는 헷갈림. 동전(앞뒤 5:5)은 최대로 헷갈리고(엔트로피 큼), "항상 앞면" 동전은 전혀 안 헷갈립니다(엔트로피 0).
비유 — Cross-Entropy 는 오답 벌점. 정답이 "고양이" 인데 모델이 "고양이 10%, 개 90%" 라 하면 큰 벌점, "고양이 95%" 면 작은 벌점입니다.
직접 해보기 — 벌점은 −log(예측확률)입니다. 정답을 0.1 로 예측하면 −log(0.1) ≈ 2.30(큰 벌점), 0.9 로 예측하면 −log(0.9) ≈ 0.10(작은 벌점)입니다.
for p in [0.1, 0.9]:
print(round(-np.log(p), 2)) # 2.3, 0.1
실무. 분류 모델 학습의 기본 손실함수가 cross-entropy 이고, KL divergence(두 분포 차이)는 모델 정렬·증류에 씁니다.
LLM 연결. LLM 학습 손실이 곧 cross-entropy(예측 분포 vs 실제 다음 단어)이며, EP7 의 학습·튜닝이 이 손실을 최소화합니다.
더 깊이 — Stanford CS229 강의노트(PDF)
3.5 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| 확률분포 | 다음 단어 후보 확률 (출력) |
| 조건부확률 | "이전 단어들 → 다음 단어" = GPT 정의 |
| Cross-Entropy | 학습 손실함수 (정답과 차이) |
| 엔트로피·KL | 불확실성·분포 차이 (정렬·증류) |
한 문장으로, LLM 은 조건부확률 분포를 내놓고(다음 단어) cross-entropy 로 틀린 만큼 벌점 받아 학습하는 확률 기계입니다.
참고 자료 — Khan Academy Statistics · Stanford CS229 Notes
4. Python (NumPy·PyTorch)
AI 의 거의 모든 코드는 Python 으로 씁니다. 그중 NumPy(숫자 배열)와 PyTorch(딥러닝)가 양대 도구이며, 둘 다 벡터·행렬을 빠르게 다루는 것이 핵심입니다.
4.1 NumPy 배열 (ndarray)
숫자를 격자로 담는 고속 배열로, Python 기본 리스트보다 수십 배 빠릅니다.
비유 — 엑셀의 코드 버전. 셀에 숫자를 채우고 한 번에 계산하는 엑셀처럼, ndarray 는 반복문 없이 배열 전체를 한 줄로 연산합니다.
직접 해보기 — 리스트는
[x*2 for x in [1,2,3]]처럼 반복문이 필요하지만, NumPy 는np.array([1,2,3]) * 2한 줄로[2 4 6]을 얻습니다.
a = np.array([[1, 2, 3], [4, 5, 6]])
print(a.shape) # (2, 3)
print(a.mean(axis=0)) # [2.5 3.5 4.5] (열별 평균)
print(a[a > 3]) # [4 5 6] (조건 필터)
실무. 데이터 전처리·통계·이미지 처리의 기본기이며, Pandas·scikit-learn·PyTorch 가 전부 NumPy 위에 지어졌습니다.
LLM 연결. 임베딩·확률 배열을 NumPy 로 다룹니다. 모든 텐서 연산의 개념적 출발점입니다.
더 깊이 — NumPy Absolute Beginners
4.2 브로드캐스팅 (Broadcasting)
모양이 다른 배열끼리 연산할 때 작은 쪽을 자동으로 늘려 맞추는 규칙입니다.
비유 — 양념 한 스푼씩. 학생 30명 점수에 전원 +5점 할 때, 5를 30번 복사할 필요 없이 한 번에 더해지는 것입니다.
직접 해보기 —
np.array([[80],[90],[70]]) + 5는 전원 +5 되어[[85],[95],[75]]가 됩니다.
M = np.array([[1, 2, 3], [4, 5, 6]])
print(M - M.mean(axis=0)) # 각 열에서 평균 빼기 (자동 확장)
실무. 정규화(평균 빼고 표준편차 나누기)가 전부 브로드캐스팅이라 코드가 짧고 빨라집니다.
LLM 연결. 배치 데이터(문장 여러 개)에 같은 가중치를 적용할 때 브로드캐스팅이 자동 처리합니다.
더 깊이 — NumPy Broadcasting
4.3 PyTorch 텐서·자동미분
GPU 까지 갈 수 있는 NumPy 배열(텐서)에 미분 자동 계산(autograd)이 더해진 것입니다.
비유 — NumPy 의 형. ndarray 가 계산기라면, 텐서는 GPU 가속에 자동 미분까지 되는 계산기입니다.
직접 해보기 —
x = torch.tensor(2.0, requires_grad=True)로 두고y = x**3; y.backward()하면, 손으로 미분 안 해도x.grad가 3x² = 12 를 자동으로 줍니다.
import torch
x = torch.tensor(2.0, requires_grad=True)
(x**3).backward()
print(x.grad) # tensor(12.)
실무. 모든 딥러닝 모델이 PyTorch(또는 유사 프레임워크) 텐서로 작성되며, autograd 덕에 역전파를 손으로 짤 필요가 없습니다.
LLM 연결. 모든 LLM 이 텐서로 구현되고, autograd 가 섹션 2(미분)·5(역전파)를 자동화해 줍니다.
더 깊이 — PyTorch Learn the Basics
4.4 정리
| 도구 | 역할 |
|---|---|
| NumPy ndarray | 숫자 배열 기본 (벡터·행렬) |
| 브로드캐스팅 | 정규화·배치 연산 간결화 |
| PyTorch 텐서 | GPU 가속 배열 |
| autograd | 미분·역전파 자동화 |
한 문장으로, NumPy 로 숫자를 빠르게, PyTorch 로 GPU 와 자동미분까지 — 이 둘이 AI 코드의 손과 발입니다.
참고 자료 — NumPy Absolute Beginners · PyTorch Basics
5. 신경망 기초
Transformer(LLM 의 뼈대)는 작은 신경망 블록을 수십 층 쌓은 것입니다. 그 블록 하나를 이해하면 EP4·EP5 가 훨씬 쉬워집니다.
5.1 퍼셉트론 (Perceptron)
입력에 가중치를 곱해 더하고(내적!) 문턱을 넘으면 신호를 내보내는 인공 뉴런입니다.
비유 — 동아리 가입 결정. "친구 있나(×3)? 회비 싼가(×2)? 시간 맞나(×2)?" 각 항목에 중요도(가중치)를 곱해 합산하고, 일정 점수를 넘으면 가입하는 것이 퍼셉트론입니다.
직접 해보기 — 입력
[1, 0, 1], 가중치[3, 2, 2]의 가중합은 1×3 + 0×2 + 1×2 = 5(= 내적!)입니다. 문턱이 4 면 5 > 4 라서 신호 1(활성화)이 나갑니다.
x = np.array([1, 0, 1]); w = np.array([3, 2, 2])
out = x @ w - 4 # 가중합 + 편향
print(1 if out > 0 else 0) # 1 (활성화)
실무. 퍼셉트론 수천 개를 층층이 쌓으면 심층 신경망이 됩니다. 모든 딥러닝의 기본 단위죠.
LLM 연결. Transformer 의 FFN(피드포워드) 층이 곧 퍼셉트론 묶음입니다. "가중합 = 내적" 이라 섹션 1 과 직결됩니다.
더 깊이 — 3Blue1Brown 신경망편
5.2 활성화함수 (ReLU·Sigmoid·Softmax)
가중합 결과를 비선형으로 바꿔 신경망이 복잡한 패턴을 배우게 하는 함수입니다.
비유 — 수도꼭지·확률 변환기. ReLU 는 "음수면 잠그고(0) 양수면 그대로 흘려보냄"(가장 흔함), Sigmoid 는 어떤 값이든 0~1 사이로, Softmax 는 여러 점수를 합이 1인 확률로 바꿉니다(다음 단어 고르기).
직접 해보기 — ReLU([-2, 3, -1, 5]) 는 음수를 0 으로 바꿔
[0, 3, 0, 5]. Softmax([1, 2, 3]) 은 큰 값일수록 큰 확률을 줘 합이 1인[0.09, 0.24, 0.67]이 됩니다.
def softmax(x):
e = np.exp(x - x.max()); return e / e.sum()
print(softmax(np.array([1.0, 2.0, 3.0])).round(2)) # [0.09 0.24 0.67]
실무. ReLU 는 은닉층 표준, Softmax 는 마지막 출력(분류·다음 단어)에 쓰여 거의 모든 모델에 등장합니다.
LLM 연결. LLM 의 마지막 단계가 Softmax 로, 전체 어휘 점수를 다음 단어 확률로 변환합니다(섹션 3 과 직결).
더 깊이 — MIT 6.S191 Lecture 1
5.3 손실함수·역전파
예측이 얼마나 틀렸는가가 손실, 그 오차를 거꾸로 전달해 가중치를 고치는 것이 역전파입니다.
비유 — 양궁 보정. 화살이 과녁에서 얼마나 빗나갔나(손실) 보고 팔·자세를 조금씩 교정(역전파)하면, 반복할수록 명중합니다.
직접 해보기 — 흐름은 예측 → 정답과 비교해 손실(cross-entropy, 3.4) → 미분(그래디언트, 2.2) → 체인룰(2.3)로 모든 층에 오차 전달(역전파) → 경사하강(2.4)으로 수정, 입니다. PyTorch 는
loss.backward()한 줄로 전부 자동입니다.
import torch.nn as nn
model = nn.Linear(3, 1)
x = torch.tensor([[1.0, 0.0, 1.0]]); y = torch.tensor([[1.0]])
loss = nn.MSELoss()(model(x), y)
loss.backward() # 역전파 자동 (체인룰)
실무. "loss 가 안 떨어진다" 가 학습 디버깅 1순위이며, 역전파는 autograd 가 자동 처리합니다.
LLM 연결. LLM 학습 1 step 은 예측 → cross-entropy 손실 → 역전파 → 가중치 수정으로, 섹션 2·3 이 여기서 합쳐집니다.
더 깊이 — 3Blue1Brown 역전파편
5.4 정규화 (Dropout·LayerNorm)
모델이 암기만 하고 응용 못 하는 현상(오버피팅)을 막는 장치들입니다.
비유 — 기출만 외운 학생. 기출은 100점인데 새 문제는 0점이 오버피팅입니다. Dropout 은 공부할 때 일부러 일부 뉴런을 꺼서 한쪽 의존을 막고, LayerNorm 은 값들의 평균·분산을 정돈합니다(3.3).
직접 해보기 — LayerNorm 은
[10, 20, 30]에서 평균 20 을 빼고 표준편차로 나눠[-1.22, 0, 1.22](평균0·분산1)로 정돈합니다.
import torch.nn as nn
print(nn.LayerNorm(3)(torch.tensor([[10.0, 20.0, 30.0]])))
실무. 오버피팅은 모든 모델의 적이라 Dropout·LayerNorm·조기종료가 표준 방어입니다.
LLM 연결. Transformer 의 모든 블록에 LayerNorm 이 들어갑니다(EP4 구조도에 반드시 등장). 섹션 3 의 평균·분산이 여기 쓰입니다.
더 깊이 — MIT 6.S191
5.5 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| 퍼셉트론 | FFN 층 (가중합=내적) |
| ReLU | 은닉층 비선형 |
| Softmax | 다음 단어 확률 출력 |
| 손실·역전파 | 학습 (섹션 2+3 결합) |
| LayerNorm | 모든 Transformer 블록 |
한 문장으로, Transformer 는 퍼셉트론(가중합) + Softmax(확률) + LayerNorm(정돈) 블록을 수십 층 쌓고 역전파로 학습한 것입니다.
참고 자료 — 3Blue1Brown Neural Networks · MIT 6.S191
6. 자료구조·복잡도
LLM 은 왜 컨텍스트가 길면 느려지나, 왜 KV cache 가 필요한가 — 이 답이 자료구조·복잡도에 있습니다. EP5 의 KV cache 와 어텐션 비용을 이해하는 열쇠입니다.
6.1 시간복잡도 Big-O
데이터가 N개로 늘 때 시간이 얼마나 빨리 늘어나는가의 표기입니다.
비유 — 친구 만나기. O(1)은 단톡방 공지(인원 무관 한 번), O(N)은 한 명씩 전화(100명=100통), O(N²)은 모두가 모두와 1:1 만남(100명=약 10,000번)입니다.
직접 해보기 — N=100 이면 O(N)=100, O(N²)=10,000(100배 차이!), O(log N)≈7(가장 빠름)입니다. 리스트 검색
in은 O(N)이지만 집합(set)은 O(1)입니다.
s = set(range(1000000))
print(500000 in s) # 거의 즉시 (해시 O(1))
실무. "이 코드 왜 느리지?" 의 답이 대부분 복잡도이며, O(N²)를 O(N log N)으로 바꾸는 것이 최적화의 핵심입니다.
LLM 연결. 어텐션은 O(N²)입니다. 모든 단어가 모든 단어와 내적(1.3)하기 때문에, 컨텍스트가 2배면 비용이 4배가 됩니다. EP5·EP6 의 효율화 연구가 이 N² 를 줄이려는 시도입니다.
더 깊이 — Khan Academy Algorithms
6.2 해시·트리·큐
데이터를 빠르게 찾고(해시) 정렬하고(트리) 순서를 관리하는(큐) 그릇들입니다.
비유. 해시테이블은 사물함(번호 알면 즉시 꺼냄 O(1)), 트리는 토너먼트 대진표(단계적 탐색 O(log N)), 큐는 줄 서기(먼저 온 게 먼저, FIFO)입니다.
직접 해보기 — 딕셔너리(해시)로 단어를 세면
count[w] = count.get(w, 0) + 1한 줄로{'고양이': 3, '개': 2}처럼 즉시 집계됩니다.
phone = {"철수": "010-1", "영희": "010-2"}
print(phone["영희"]) # 즉시 (해시 O(1))
실무. 토크나이저(단어↔숫자 매핑)가 해시이고, 캐시·중복 제거에 set/dict 가 필수입니다.
LLM 연결. 토크나이저의 어휘 사전이 해시테이블입니다(단어 → ID 즉시 변환). 섹션 7 과 연결됩니다.
더 깊이 — Khan Academy CS
6.3 KV Cache
이미 계산한 단어들의 결과를 저장해 두고 재사용하는 것입니다(O(N²) 부담 완화).
비유 — 책갈피. 읽은 페이지를 매번 처음부터 다시 펴면 O(N²)지만, 책갈피(cache)로 이전 계산을 보관하면 새 단어만 계산하면 됩니다.
직접 해보기 — 캐시 없이 단어 100개를 생성하면 1+2+...+100 = 5050번(O(N²))이지만, KV cache 로 이전 99개를 재사용하면 매번 1번씩 100번(O(N))으로 줄어듭니다.
cache = {}
def fib(n):
if n < 2: return n
if n in cache: return cache[n] # 재사용
cache[n] = fib(n-1) + fib(n-2); return cache[n]
print(fib(50)) # 캐시 없으면 수십 초, 있으면 즉시
실무. LLM 추론 속도의 핵심으로, KV cache 없이는 긴 대화가 기하급수적으로 느려집니다. GPU 메모리의 큰 부분을 차지하죠.
LLM 연결. EP5 의 KV cache 가 바로 이것으로, 어텐션 O(N²)의 반복 계산을 저장으로 줄입니다.
6.4 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| Big-O | 어텐션 O(N²) 비용 이해 |
| 해시테이블 | 토크나이저 어휘 사전 |
| 큐·캐시 | KV cache (추론 속도) |
한 문장으로, 어텐션은 모두가 모두를 보는 O(N²)라 느리고, 그걸 KV cache(저장 재사용)로 완화하는 것이 LLM 서빙의 핵심입니다.
참고 자료 — Khan Academy CS · Jay Alammar Illustrated Transformer
7. 자연언어 기초
LLM 은 글자를 직접 못 읽어 숫자로 바꿔야 합니다. "문장 → 토큰 → 숫자 ID → 벡터(임베딩)" 이 변환 과정이 LLM 의 입구이며, EP2 의 핵심 전제입니다.
7.1 토큰화·BPE
문장을 의미 조각(토큰)으로 쪼개는 것이며, 자주 같이 나오는 글자쌍을 덩어리로 묶습니다(BPE).
비유 — 레고 분해. "안녕하세요" 를 ["안녕", "하세요"] 또는 ["안","녕","하","세","요"] 로 쪼갭니다. 자주 쓰는 덩어리일수록 한 조각이 됩니다.
직접 해보기 — 영어는 단어가 곧 토큰에 가깝지만, 한글은 글자/음절 단위로 더 잘게 쪼개집니다. "low", "lower", "lowest" 는 공통 "low" 를 한 토큰으로 묶습니다.
vocab = {"안녕": 0, "하세요": 1} # 어휘 사전(해시!)
print([vocab[t] for t in ["안녕", "하세요"]]) # [0, 1]
실무. API 요금이 토큰 수로 매겨집니다(EP2). 한글은 영어보다 토큰이 많이 나와 같은 내용도 비용이 더 듭니다.
LLM 연결. 모든 입력의 첫 단계이며, 토큰 수가 곧 비용·컨텍스트 한도입니다(EP5 의 128K 컨텍스트 = 토큰 12.8만 개).
더 깊이 — Hugging Face LLM Course
7.2 임베딩 (Embedding)
토큰 ID 를 의미를 담은 벡터(1.1)로 바꾸는 것으로, 비슷한 뜻은 비슷한 방향을 가집니다.
비유 — 의미 지도. "왕 - 남자 + 여자 ≈ 여왕" 처럼, 단어를 공간의 점으로 놓으면 의미 관계가 방향·거리로 표현됩니다.
직접 해보기 — "강아지" 와 "개" 벡터는 코사인 유사도(1.4)가 높지만(가까움), "강아지" 와 "자동차" 는 낮습니다(멀음).
dog = np.array([0.9, 0.1, 0.8]); car = np.array([0.1, 0.9, 0.05])
from numpy.linalg import norm
print(round(dog @ car / (norm(dog)*norm(car)), 2)) # 0.4 (멀음)
실무. RAG·검색·추천이 전부 임베딩 유사도(1.4·벡터DB)로, "의미 검색" 의 기반입니다.
LLM 연결. 토큰 → 임베딩이 Transformer 의 입력층이며, 섹션 1(벡터)이 여기서 실제로 쓰입니다(EP2·EP3).
7.3 위치 임베딩 (Positional Embedding)
단어의 순서 정보를 벡터에 새기는 법입니다(어텐션 자체는 순서를 모르기 때문).
비유 — 좌석 번호. "철수가 영희를 좋아해" 와 "영희가 철수를 좋아해" 는 단어는 같고 순서만 다릅니다. 위치 정보 없이는 둘을 구분 못 하므로, 각 단어에 몇 번째인지 표식을 붙입니다.
직접 해보기 — 단어 집합 {철수, 영희, 좋아해} 만으로는 누가 누구를 좋아하는지 알 수 없습니다. "철수=1번, 영희=3번" 같은 위치 정보를 더해야 의미가 확정됩니다.
실무. EP5 의 RoPE·YaRN·LongRoPE 가 전부 위치 임베딩 기법으로, 긴 컨텍스트(128K)를 가능케 하는 핵심 기술입니다.
LLM 연결. EP5 전체 주제(RoPE 회전·YaRN 보정)가 위치 임베딩이며, 1.6(고유값·회전)의 직관이 여기 쓰입니다.
더 깊이 — Stanford CS224N · Jay Alammar Illustrated Transformer
7.4 한글 NFC 정규화
한글이 겉보기에 같아도 내부 코드가 다를 수 있어, 하나의 표준형(NFC)으로 통일하는 것입니다.
비유 — 같은 글자 다른 조립. "한" 을 완성형 1글자로 저장하느냐(NFC), ㅎ+ㅏ+ㄴ 조합으로 저장하느냐(NFD)에 따라 컴퓨터는 다른 문자열로 봅니다.
직접 해보기 — 완성형 "한글" 과 분해형(NFD) "한글" 은 겉보기엔 같아도
==비교 시 False 입니다. NFC 정규화 후에야 True 가 됩니다.
import unicodedata
a = "한글"; b = unicodedata.normalize("NFD", a)
print(a == b, a == unicodedata.normalize("NFC", b)) # False True
실무. 맥(NFD)·윈도우(NFC) 파일명 차이, 한글 검색 버그의 단골 원인입니다. 본 youtubedu/youtubedown 도 NFC 정규화가 필수 룰입니다.
LLM 연결. 한글 토큰화·검색 정확도의 전제로, 정규화하지 않으면 같은 단어를 다른 토큰으로 처리합니다.
더 깊이 — Hugging Face LLM Course
7.5 정리
| 개념 | LLM 에서의 역할 |
|---|---|
| 토큰화·BPE | 입력 첫 단계 (비용·컨텍스트 단위) |
| 임베딩 | 토큰 → 의미 벡터 (입력층) |
| 위치 임베딩 | 순서 정보 (EP5 RoPE/YaRN) |
| NFC 정규화 | 한글 처리 정확도 |
한 문장으로, "문장 → 토큰 → ID → 임베딩(+위치)" 으로 글자를 벡터로 바꾸는 것이 LLM 의 입구이며, 섹션 1(벡터)·6(해시)이 여기서 합쳐집니다.
참고 자료 — Hugging Face LLM Course · Jay Alammar Illustrated Transformer · Stanford CS224N
8. 마치며
7개 영역이 LLM 안에서 어떻게 모이는지 한눈에 보면 다음과 같습니다.
글자 → [토큰화·임베딩(7장)] → 벡터(1장)
↓
[어텐션 = 내적(1장)] ← 위치임베딩(7장)
↓ (행렬 곱 1장, Softmax 5장, 확률 3장)
다음 단어 확률 분포
↓
[손실(cross-entropy 3장) → 역전파(2장·5장) → 경사하강(2장)]
↓
학습된 LLM
한 문장으로, LLM 은 글자를 벡터로 바꿔(1·7장) 행렬 곱과 내적으로 섞고(1·5장) 확률로 다음 단어를 찍고(3장) 미분으로 학습하는(2장) 거대한 계산기이며, 그걸 효율적으로 돌리는(6장) 것이 엔지니어링입니다.
이제 EP1~7 본 강의로 가세요. 막히는 용어가 나오면 어느 장인지 떠올리고, 이 자료의 해당 절과 참고 링크로 돌아오면 됩니다.
다음 단계 학습 경로 (검증일 2026-05-20, Tier 1 ≥6)
| 순서 | 자료 | 링크 |
|---|---|---|
| 수학 직관 | 3Blue1Brown | Linear Algebra |
| ML 입문 | Andrew Ng | DeepLearning.AI |
| 딥러닝 | MIT 6.S191 | introtodeeplearning.com |
| NLP·LLM | Hugging Face | LLM Course |
| Transformer | Jay Alammar · CS224N | Illustrated · CS224N |
클릭하거나 Space를 눌러 뒤집기